#ifndef _ADR_PROPERTY_H_
#define _ADR_PROPERTY_H_

#include <string>
#include "adr/Metadata/BaseProperty.h"

namespace adr {
	using namespace std;

	template<typename T>
	class Property : public BaseProperty {
	private:
		T* value;
	public:
		Property(const string& name, const string& displayName, T* value)
			: BaseProperty(name, displayName), value(value) {}

		T* GetValue() {
			return this->value;
		}

		bool HasValue() const override {
			return this->value != nullptr;
		}
	};

	template<>
	class Property<string> : public BaseProperty {
	private:
		string* value;
	public:
		Property(const string& name, const string& displayName, string* value)
			: BaseProperty(name, displayName), value(value) {}

		string* GetValue() {
			return this->value;
		}

		bool HasValue() const override {
			return this->value != nullptr && this->value->size() > 0;
		}
	};
}

#endif